1. Create models comment и like;:
from django.db import models
from django.contrib.auth.models import User
from my_holiday.destination.models import Place
class Comment(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
place = models.ForeignKey(Place, on_delete=models.CASCADE)
text = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f"{self.user.username} - {self.place.name} - {self.created_at}"
class Like(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
place = models.ForeignKey(Place, on_delete=models.CASCADE, related_name='likes')
def __str__(self):
return f"{self.user.username} - {self.place.name}"
2. Update place_details.html
{% extends 'base.html' %}
{% block main_content %}
Place Details
{{ place.category }}
Name: {{ place.name }}
Description: {{ place.description }}
Rating: {{ place.rating }}
Likes
{{ place.likes.count }} Likes
{% if user.is_authenticated %}
{% endif %}
{% endblock %}
3. Create Views
# views.py
from django.shortcuts import redirect, get_object_or_404
from django.contrib.auth.decorators import login_required
from .forms import CommentForm, LikeForm
from .models import Comment, Like # Importing the models
@login_required
def add_comment(request, place_id):
place = get_object_or_404(Place, pk=place_id)
if request.method == 'POST':
form = CommentForm(request.POST)
if form.is_valid():
text = form.cleaned_data['text']
Comment.objects.create(user=request.user, place=place, text=text)
return redirect('details_place', pk=place_id)
@login_required
def add_like(request, place_id):
place = get_object_or_404(Place, pk=place_id)
like, created = Like.objects.get_or_create(user=request.user, place=place)
if not created:
like.delete() # Unlike if already liked
return redirect('details_place', pk=place_id)
4. Forms
# forms.py
from django import forms
class CommentForm(forms.Form):
text = forms.CharField(widget=forms.Textarea)
class LikeForm(forms.Form):
pass # No fields needed, likes are handled via button click
5. Add in urls
Comments
{% for comment in place.comments.all %}- {{ comment.user.username }}: {{ comment.text }}
{% endfor %}